﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0065)mhtml:file://E:\sve-air\documentacion\Raw RSA - Crypto++ Wiki.mht -->
<HTML lang=en dir=ltr><HEAD><TITLE>Raw RSA - Crypto++ Wiki</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META content="MSHTML 6.00.6000.17080" name=GENERATOR><LINK href="/favicon.ico" 
rel="shortcut icon"><LINK title="Crypto++ Wiki (en)" 
href="/w/opensearch_desc.php" type=application/opensearchdescription+xml 
rel=search><LINK title="Crypto++ Wiki Atom feed" 
href="/w/index.php?title=Special:RecentChanges&amp;feed=atom" 
type=application/atom+xml rel=alternate><LINK media=screen 
href="Raw%20RSA%20-%20Crypto++%20Wiki_archivos/shared.css" rel=stylesheet><LINK 
media=print href="Raw%20RSA%20-%20Crypto++%20Wiki_archivos/commonPrint.css" 
rel=stylesheet><LINK media=screen 
href="Raw%20RSA%20-%20Crypto++%20Wiki_archivos/main.css" rel=stylesheet><!--[if lt IE 5.5000]><link rel="stylesheet" href="/w/skins/monobook/IE50Fixes.css?270" media="screen" /><![endif]--><!--[if IE 5.5000]><link rel="stylesheet" href="/w/skins/monobook/IE55Fixes.css?270" media="screen" /><![endif]--><!--[if IE 6]><link rel="stylesheet" href="/w/skins/monobook/IE60Fixes.css?270" media="screen" /><![endif]--><!--[if IE 7]><LINK 
media=screen href="Raw%20RSA%20-%20Crypto++%20Wiki_archivos/IE70Fixes.css" 
rel=stylesheet><![endif]--><LINK 
href="/w/index.php?title=MediaWiki:Common.css&amp;usemsgcache=yes&amp;ctype=text%2Fcss&amp;smaxage=18000&amp;action=raw&amp;maxage=18000" 
rel=stylesheet><LINK media=print 
href="/w/index.php?title=MediaWiki:Print.css&amp;usemsgcache=yes&amp;ctype=text%2Fcss&amp;smaxage=18000&amp;action=raw&amp;maxage=18000" 
rel=stylesheet><LINK 
href="/w/index.php?title=MediaWiki:Monobook.css&amp;usemsgcache=yes&amp;ctype=text%2Fcss&amp;smaxage=18000&amp;action=raw&amp;maxage=18000" 
rel=stylesheet><LINK href="Raw%20RSA%20-%20Crypto++%20Wiki_archivos/index.css" 
rel=stylesheet>
<SCRIPT>
var skin="monobook",
stylepath="/w/skins",
wgUrlProtocols="http\\:\\/\\/|https\\:\\/\\/|ftp\\:\\/\\/|irc\\:\\/\\/|gopher\\:\\/\\/|telnet\\:\\/\\/|nntp\\:\\/\\/|worldwind\\:\\/\\/|mailto\\:|news\\:|svn\\:\\/\\/",
wgArticlePath="/wiki/$1",
wgScriptPath="/w",
wgScriptExtension=".php",
wgScript="/w/index.php",
wgVariantArticlePath=false,
wgActionPaths={},
wgServer="http://www.cryptopp.com",
wgCanonicalNamespace="",
wgCanonicalSpecialPageName=false,
wgNamespaceNumber=0,
wgPageName="Raw_RSA",
wgTitle="Raw RSA",
wgAction="view",
wgArticleId=2030,
wgIsArticle=true,
wgUserName=null,
wgUserGroups=null,
wgUserLanguage="en",
wgContentLanguage="en",
wgBreakFrames=false,
wgCurRevisionId=7803,
wgVersion="1.16.0",
wgEnableAPI=true,
wgEnableWriteAPI=true,
wgSeparatorTransformTable=["", ""],
wgDigitTransformTable=["", ""],
wgMainPageTitle="Main Page",
wgFormattedNamespaces={"-2": "Media", "-1": "Special", "0": "", "1": "Talk", "2": "User", "3": "User talk", "4": "Crypto++ Wiki", "5": "Crypto++ Wiki talk", "6": "File", "7": "File talk", "8": "MediaWiki", "9": "MediaWiki talk", "10": "Template", "11": "Template talk", "12": "Help", "13": "Help talk", "14": "Category", "15": "Category talk"},
wgNamespaceIds={"media": -2, "special": -1, "": 0, "talk": 1, "user": 2, "user_talk": 3, "crypto++_wiki": 4, "crypto++_wiki_talk": 5, "file": 6, "file_talk": 7, "mediawiki": 8, "mediawiki_talk": 9, "template": 10, "template_talk": 11, "help": 12, "help_talk": 13, "category": 14, "category_talk": 15, "image": 6, "image_talk": 7},
wgSiteName="Crypto++ Wiki",
wgCategories=["Sample", "Download", "Public Key", "Encryption"],
wgRestrictionEdit=[],
wgRestrictionMove=[];
</SCRIPT>

<SCRIPT src="Raw%20RSA%20-%20Crypto++%20Wiki_archivos/wikibits.js"></SCRIPT>

<SCRIPT src="Raw%20RSA%20-%20Crypto++%20Wiki_archivos/ajax.js"></SCRIPT>

<SCRIPT src="Raw%20RSA%20-%20Crypto++%20Wiki_archivos/index.php"></SCRIPT>
</HEAD>
<BODY class="mediawiki ltr ns-0 ns-subject page-Raw_RSA skin-monobook">
<DIV id=globalWrapper>
<DIV id=column-content>
<DIV id=content><A id=top></A>
<H1 class=firstHeading id=firstHeading>Raw rsa</H1>
<DIV id=bodyContent>
<H3 id=siteSub>From Crypto++ Wiki</H3>
<DIV id=contentSub></DIV>
<DIV id=jump-to-nav>Jump to: <A 
href="http://www.cryptopp.com/wiki/Raw_RSA#column-one">navigation</A>, <A 
href="http://www.cryptopp.com/wiki/Raw_RSA#searchInput">search</A></DIV><!-- start content -->
<P>The Crypto++ mailing list occasionally receives questions on how to preform 
<A title="Raw RSA" 
href="mhtml:file://E:\sve-air\documentacion\Raw RSA - Crypto++ Wiki.mht!http://www.cryptopp.com/wiki/Raw_RSA">Raw 
RSA</A> encryption and decryption, or how to 'encrypt with the private key'. 
Performing encryption and decryption operations using Crypto++'s RSA primitives 
can be useful at times, so this page will demonstrate using the trap door 
functions. 'Encrypt with the private key' is questionable since its usually not 
considered a valid cryptographic operation (frequently a signature is needed - 
see <I><A class="external text" 
href="http://www.cryptopp.com/fom-serve/cache/96.html">How do I encrypt a 
message using a *private* key?</A></I>). </P>
<P>This page will demonstrate performing RSA encryption and decryption using 
Crypto++'s RSA primitives. If the primitives are not low-level enough, you can 
use Crypto++'s Integer class and modular exponentiation (<TT>a_exp_b_mod_c</TT>) 
in <TT>nbtheory.h</TT>. If the primitives are too low, try the higher level 
objects at <A class=mw-redirect title=RSA 
href="http://www.cryptopp.com/wiki/RSA">RSA</A> keys, <A 
title="RSA Encryption Schemes" 
href="http://www.cryptopp.com/wiki/RSA_Encryption_Schemes">RSA encryption 
schemes</A>, and <A title="RSA Signature Schemes" 
href="http://www.cryptopp.com/wiki/RSA_Signature_Schemes">RSA signature 
schemes</A>. </P>
<TABLE class=toc id=toc>
  <TBODY>
  <TR>
    <TD>
      <DIV id=toctitle>
      <H2>Contents</H2></DIV>
      <UL>
        <LI class="toclevel-1 tocsection-1"><A 
        href="http://www.cryptopp.com/wiki/Raw_RSA#Trapdoor_Functions"><SPAN 
        class=tocnumber>1</SPAN> <SPAN class=toctext>Trapdoor 
        Functions</SPAN></A> 
        <LI class="toclevel-1 tocsection-2"><A 
        href="http://www.cryptopp.com/wiki/Raw_RSA#Keys.2C_Exponents_and_Moduli"><SPAN 
        class=tocnumber>2</SPAN> <SPAN class=toctext>Keys, Exponents and 
        Moduli</SPAN></A> 
        <LI class="toclevel-1 tocsection-3"><A 
        href="http://www.cryptopp.com/wiki/Raw_RSA#Encryption_and_Decryption"><SPAN 
        class=tocnumber>3</SPAN> <SPAN class=toctext>Encryption and 
        Decryption</SPAN></A> 
        <UL>
          <LI class="toclevel-2 tocsection-4"><A 
          href="http://www.cryptopp.com/wiki/Raw_RSA#Encryption"><SPAN 
          class=tocnumber>3.1</SPAN> <SPAN class=toctext>Encryption</SPAN></A> 
          <LI class="toclevel-2 tocsection-5"><A 
          href="http://www.cryptopp.com/wiki/Raw_RSA#Decryption"><SPAN 
          class=tocnumber>3.2</SPAN> <SPAN class=toctext>Decryption</SPAN></A> 
          </LI></UL>
        <LI class="toclevel-1 tocsection-6"><A 
        href="http://www.cryptopp.com/wiki/Raw_RSA#Private_Key_Encryption"><SPAN 
        class=tocnumber>4</SPAN> <SPAN class=toctext>Private Key 
        Encryption</SPAN></A> 
        <LI class="toclevel-1 tocsection-7"><A 
        href="http://www.cryptopp.com/wiki/Raw_RSA#Rabin_Cryptosystem"><SPAN 
        class=tocnumber>5</SPAN> <SPAN class=toctext>Rabin 
        Cryptosystem</SPAN></A> 
        <LI class="toclevel-1 tocsection-8"><A 
        href="http://www.cryptopp.com/wiki/Raw_RSA#Downloads"><SPAN 
        class=tocnumber>6</SPAN> <SPAN class=toctext>Downloads</SPAN></A> 
      </LI></UL></TD></TR></TBODY></TABLE>
<SCRIPT>if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </SCRIPT>

<H2><SPAN class=mw-headline id=Trapdoor_Functions>Trapdoor Functions 
</SPAN></H2>
<P>RSA uses a trapdoor function, meaning a result is easy to compute one way, 
but hard to compute the other way without special knowledge. For RSA, the public 
function (which is easy to compute) is exponentiation with the public exponent. 
The hard problem is undoing the exponentiation with the public exponent. Without 
knowledge of the factors of the modulus or the private exponent, its hard to 
undo the previous exponentiation and recover the message. Since the owner of the 
private key has the private exponent, the earlier exponentiation can be easily 
reversed (ergo, the trapdoor). </P>
<H2><SPAN class=mw-headline id=Keys.2C_Exponents_and_Moduli>Keys, Exponents and 
Moduli </SPAN></H2>
<P>RSA uses two keys - a public key and a private key. Under RSA, the public key 
is {n, e} and the private key is {n, e, d}. <TT>e</TT> is the public exponent, 
and <TT>d</TT> is the private exponent. The public key is for mass consumption 
and is usually published or readily available. The private key should remain 
secret. </P>
<P>The public exponent is often 3, 17, or 65537 (3 can be a bad choice for 
signing keys when coupled with an implementation flaw - see <A 
class="external text" href="http://www.kb.cert.org/vuls/id/845620">US-Cert 
Vulnerability Note VU#845620</A>). The public exponent values are selected 
because they have a low Hamming Weight. Any choice of <TT>e</TT> and <TT>d</TT> 
will do as long as the selections satisfy the congruence and co-primality 
requirements. In fact, Crypto++'s RSA has an overloaded version of 
<TT>Initialize</TT> which will generate a RSA object with an arbitrary public 
exponent (see <A class="external text" 
href="http://www.cryptopp.com/docs/ref551/rsa_8cpp-source.html"><TT>rsa.cpp</TT></A> 
around line 145). </P>
<P>For demonstration purposes, the program below will use a 64 bit modulus. The 
modulus is artificially small, and the parameters were generated with the 
following program: </P><PRE>AutoSeededRandomPool prng;
RSA::PrivateKey privKey;

privKey.GenerateRandomWithKeySize(prng, 64);
RSA::PublicKey pubKey(privKey);</PRE>
<P>The program produced the following results, which will be used for the 
remainder of this discussion. </P><PRE>$ ./cryptopp-raw-rsa.exe 
modulus: beaadb3d839f3b5fh
private exp: 21a5ae37b9959db9h
public exp: 11h</PRE>
<P>To load the values into public and private RSA keys, we perform the 
following. In the case of the private key, Crypto++ will factor <TT>n</TT> and 
populate other class members such as <TT>m_p</TT>, <TT>m_q</TT>, <TT>m_dp</TT>, 
<TT>m_dq</TT>, and <TT>m_u</TT>. For those interested, the algorithm is located 
in <A class="external text" 
href="http://www.cryptopp.com/docs/ref551/rsa_8cpp-source.html"><TT>rsa.cpp</TT></A>, 
near line 150. </P><PRE>Integer n("0xbeaadb3d839f3b5f"), e("0x11"), d("0x21a5ae37b9959db9");

RSA::PrivateKey privKey;
privKey.Initialize(n, e, d);

RSA::PublicKey pubKey;
pubKey.Initialize(n, e);</PRE>
<P>Its always a good idea to validate any loaded keys. The code below validates 
the private and public keys ate level 3, which is most thorough (for a full 
discussion, see <A title="Keys and Formats" 
href="http://www.cryptopp.com/wiki/Keys_and_Formats">Keys and Formats</A>). The 
check on the public key is redundant since the private key is validated. It is 
shown for completeness. </P><PRE>if(!privKey.Validate(rnd, 3))
    throw runtime_error("Rsa private key validation failed");

if(!pubKey.Validate(rnd, 3))
    throw runtime_error("Rsa public key validation failed");</PRE>
<H2><SPAN class=mw-headline id=Encryption_and_Decryption>Encryption and 
Decryption </SPAN></H2>
<P>Crypto++ uses two functions for encryption and decryption. The encryption 
function is <TT>ApplyFunction</TT> and the decryption function is 
<TT>CalculateInverse</TT>. </P>
<P>Though the code below is written for RSA using a <TT>RSA::PrivateKey</TT> and 
<TT>RSA::PublicKey</TT>, Crypto++'s parameterized design allows us to use any 
class which derives from <A class="external text" 
href="http://www.cryptopp.com/docs/ref551/class_trapdoor_function.html"><TT>TrapdoorFunction</TT></A>. 
So the code below would apply equally well to <A title=ESIGN 
href="http://www.cryptopp.com/wiki/ESIGN">ESIGN</A>, <A class=new 
title="LUC (page does not exist)" 
href="http://www.cryptopp.com/w/index.php?title=LUC&amp;action=edit&amp;redlink=1">LUC</A>, 
<A class=new title="Rabin (page does not exist)" 
href="http://www.cryptopp.com/w/index.php?title=Rabin&amp;action=edit&amp;redlink=1">Rabin</A>, 
and Rabin Williams (see <A 
href="http://www.cryptopp.com/wiki/Raw_RSA#Rabin_Cryptosystem">Rabin 
Cryptosystem</A> below). </P>
<H3><SPAN class=mw-headline id=Encryption>Encryption </SPAN></H3>
<P>Next, we want to encrypt the <TT>string</TT> "secret". In RSA, encryption is 
simply <TT>c = m<SUP>e</SUP></TT>. So our task is to encode the string as an 
<TT>Integer</TT> in preparation for encryption. To accomplish the encoding, we 
perform the following. </P><PRE>strimg message = "secret";
Integer m((const byte *)message.data(), message.size());</PRE>
<P>After the above, <TT>m</TT> is encoded as an integer. We can use C++'s 
insertion operator to inspect <TT>m</TT>: </P><PRE>cout &lt;&lt; "m: " &lt;&lt; m &lt;&lt; endl;

m: 736563726574h</PRE>
<P>At this point, we have <TT>n</TT>, <TT>e</TT>, <TT>d</TT> and <TT>m</TT>. To 
encrypt <TT>m</TT>, we perform the following. </P><PRE>Integer c = pubKey.ApplyFunction(m);
cout &lt;&lt; "c: " &lt;&lt; hex &lt;&lt; c &lt;&lt; endl;

c: 3f47c32e8e17e291h</PRE>
<P><TT>ApplyFunction</TT> is the 'easy to compute' transformation. If we look at 
<A class="external text" 
href="http://www.cryptopp.com/docs/ref551/rsa_8cpp-source.html"><TT>rsa.cpp</TT></A> 
near line 65, we see the RSA class performs the expected exponentiation. </P><PRE>Integer RSAFunction::ApplyFunction(const Integer &amp;x) const
{
	DoQuickSanityCheck();
	return a_exp_b_mod_c(x, m_e, m_n);
}</PRE>
<H3><SPAN class=mw-headline id=Decryption>Decryption </SPAN></H3>
<P>In RSA, the relationship between encryption and decryption - or <TT>e</TT> 
and <TT>d</TT> is: <TT>e ∙ d ≡ 1 mod Φ(n)</TT> (the relation is also written as 
<TT>e ≡ d<SUP>-1</SUP> mod Φ(n))</TT>. Decryption is performed by raising 
<TT>c</TT> to the private exponent (<TT>m = c<SUP>d</SUP></TT>). Since the 
private exponent <TT>d</TT> is part of the private key, we must use the private 
key to undo the encryption operation. Below, we use <TT>r</TT> to denote 
"recovered" to ensure no cross pollination or slight-of-hands are occurring. 
</P><PRE>r = privKey.CalculateInverse(prng, c);
cout &lt;&lt; "r: " &lt;&lt; hex &lt;&lt; r &lt;&lt; endl;

r: 736563726574h</PRE>
<P>To no surprise, <TT>m</TT> is equal to <TT>r</TT>. If we examine <A 
class="external text" 
href="http://www.cryptopp.com/docs/ref551/rsa_8cpp-source.html"><TT>rsa.cpp</TT></A> 
around line 225, we find the following. Notice that the private exponent, 
<TT>m_d</TT>, is not used in the computation below. The pre-computed members 
(gained by factoring during <TT>Initialize</TT>) offer efficient transformations 
on common modulus sizes (such as 2048 and 3072). </P><PRE>Integer InvertibleRSAFunction::CalculateInverse(RandomNumberGenerator &amp;rng, const Integer &amp;x) const 
{
	DoQuickSanityCheck();
	ModularArithmetic modn(m_n);
	Integer r, rInv;
	do {	// do this in a loop for people using small numbers for testing
		r.Randomize(rng, Integer::One(), m_n - Integer::One());
		rInv = modn.MultiplicativeInverse(r);
	} while (rInv.IsZero());
	Integer re = modn.Exponentiate(r, m_e);
	re = modn.Multiply(re, x);			// blind
	// here we follow the notation of PKCS #1 and let u=q inverse mod p
	// but in ModRoot, u=p inverse mod q, so we reverse the order of p and q
	Integer y = ModularRoot(re, m_dq, m_dp, m_q, m_p, m_u);
	y = modn.Multiply(y, rInv);				// unblind
	if (modn.Exponentiate(y, m_e)&nbsp;!= x)		// check
		throw Exception(Exception::OTHER_ERROR, "InvertibleRSAFunction: computational error during private key operation");
	return y;
}</PRE>
<P>Finally, we recover the original <TT>string</TT>. </P><PRE>size_t req = r.MinEncodedSize();
recovered.resize(req);

r.Encode((byte *)recovered.data(), recovered.size());
cout &lt;&lt; "recovered: " &lt;&lt; recovered &lt;&lt; endl;

recovered: secret</PRE>
<H2><SPAN class=mw-headline id=Private_Key_Encryption>Private Key Encryption 
</SPAN></H2>
<P>Now would be a good time to review <I><A class="external text" 
href="http://www.cryptopp.com/fom-serve/cache/96.html">How do I encrypt a 
message using a *private* key?</A></I> from the original Crypto++ FAQ. </P>
<P>Previously, we encrypted with the public exponent of 17, and decrypted with 
the private exponent of 0x21a5ae37b9959db9. Below, we swap the roles of 
<TT>e</TT> and <TT>d</TT> so that we can encrypt with the private key (which is 
really only encrypting with the <I>previously</I> private exponent). </P><PRE>Integer n("0xbeaadb3d839f3b5f"), e("0x11"), d("0x21a5ae37b9959db9");

RSA::PrivateKey privKey;
privKey.Initialize(n, d, e);

RSA::PublicKey pubKey;
pubKey.Initialize(n, d);</PRE>
<P>We then follow the same steps of (1) encode the message, (2) call 
<TT>ApplyFunctions</TT>, and (3) call <TT>CalculateInverse</TT>. Following the 
steps results in the following. Note that the cipher text has changed from 
0x3f47c32e8e17e291 to 0x2f13630ffa8bde2e. </P><PRE>$ ./cryptopp-priv-key-enc.exe
message: secret
m: 736563726574h
c: 2f13630ffa8bde2eh
r: 736563726574h
recovered: secret</PRE>
<P>If you wanted the world to have the <I>previously</I> private key, publish 
the {n,d} pair. </P>
<H2><SPAN class=mw-headline id=Rabin_Cryptosystem>Rabin Cryptosystem 
</SPAN></H2>
<P>Rabin is a cryptosystem similar to RSA, based on square roots modulo 
<TT>p</TT> and <TT>q</TT>. Under Rabin, the public key is {n} and the private 
key consists of {p,q}. Since Rabin is a trapdoor system, a copy/paste of 
<I>RSA</I> → <I>Rabin</I> will get us a working program. </P><PRE>AutoSeededRandomPool prng;

Rabin::PrivateKey privKey;
privKey.GenerateRandomWithKeySize(prng, 128);
Rabin::PublicKey pubKey(privKey);

string message, recovered;
Integer m, c, r;

message = "secret";
cout &lt;&lt; "message: " &lt;&lt; message &lt;&lt; endl;

// Treat the message as a big endian array
m = Integer((const byte *)message.data(), message.size());
cout &lt;&lt; "m: " &lt;&lt; hex &lt;&lt; m &lt;&lt; endl;

// Encrypt
c = pubKey.ApplyFunction(m);
cout &lt;&lt; "c: " &lt;&lt; hex &lt;&lt; c &lt;&lt; endl;

// Decrypt
r = privKey.CalculateInverse(prng, c);
cout &lt;&lt; "r: " &lt;&lt; hex &lt;&lt; r &lt;&lt; endl;

// Round trip it
size_t req = r.MinEncodedSize();
recovered.resize(req);
r.Encode((byte *)recovered.data(), recovered.size());

cout &lt;&lt; "recovered: " &lt;&lt; recovered &lt;&lt; endl;	</PRE>
<P>The program outputs the following. </P><PRE>$ ./cryptopp-raw-rabin.exe
modulus: b2ee1ab79e47f999dd9ade0820701fb9h
prime 1: dbac2dd38515f2dbh
prime 2: d08518824c5cf9fbh

message: secret
m: 736563726574h
c: 2d83b790594a74ba741424fe0h
r: 736563726574h
recovered: secret</PRE>
<H2><SPAN class=mw-headline id=Downloads>Downloads </SPAN></H2>
<P><A class=internal title=Cryptopp-raw-rsa.zip 
href="http://www.cryptopp.com/w/images/4/45/Cryptopp-raw-rsa.zip">cryptopp-raw-rsa.zip</A> 
- RSA encryption and decryption using Crypto++'s ApplyFunction and 
CalculateInverse. </P>
<P><A class=internal title=Cryptopp-raw-rabin.zip 
href="http://www.cryptopp.com/w/images/f/f5/Cryptopp-raw-rabin.zip">cryptopp-raw-rabin.zip</A> 
- Rabin encryption and decryption using Crypto++'s ApplyFunction and 
CalculateInverse. </P><!-- 
NewPP limit report
Preprocessor node count: 166/1000000
Post-expand include size: 0/2097152 bytes
Template argument size: 0/2097152 bytes
Expensive parser function count: 0/100
--><!-- Saved in parser cache with key crypto-wikicryptopp_:pcache:idhash:2030-0!1!0!!en!2!edit=0 and timestamp 20110217180836 -->
<DIV class=printfooter>Retrieved from "<A 
href="mhtml:file://E:\sve-air\documentacion\Raw RSA - Crypto++ Wiki.mht!http://www.cryptopp.com/wiki/Raw_RSA">http://www.cryptopp.com/wiki/Raw_RSA</A>"</DIV>
<DIV class=catlinks id=catlinks>
<DIV id=mw-normal-catlinks><A title=Special:Categories 
href="http://www.cryptopp.com/wiki/Special:Categories">Categories</A>: <SPAN 
dir=ltr><A title=Category:Sample 
href="http://www.cryptopp.com/wiki/Category:Sample">Sample</A></SPAN> | <SPAN 
dir=ltr><A title=Category:Download 
href="http://www.cryptopp.com/wiki/Category:Download">Download</A></SPAN> | 
<SPAN dir=ltr><A title="Category:Public Key" 
href="http://www.cryptopp.com/wiki/Category:Public_Key">Public Key</A></SPAN> | 
<SPAN dir=ltr><A class=new title="Category:Encryption (page does not exist)" 
href="http://www.cryptopp.com/w/index.php?title=Category:Encryption&amp;action=edit&amp;redlink=1">Encryption</A></SPAN></DIV></DIV><!-- end content -->
<DIV class=visualClear></DIV></DIV></DIV></DIV>
<DIV id=column-one>
<DIV class=portlet id=p-cactions>
<H5>Views</H5>
<DIV class=pBody>
<UL>
  <LI class=selected id=ca-nstab-main><A title="View the content page [c]" 
  accessKey=c 
  href="mhtml:file://E:\sve-air\documentacion\Raw RSA - Crypto++ Wiki.mht!http://www.cryptopp.com/wiki/Raw_RSA">Page</A> 

  <LI class=new id=ca-talk><A title="Discussion about the content page [t]" 
  accessKey=t 
  href="http://www.cryptopp.com/w/index.php?title=Talk:Raw_RSA&amp;action=edit&amp;redlink=1">Discussion</A> 

  <LI id=ca-viewsource><A 
  title="This page is protected.&#10;You can view its source [e]" accessKey=e 
  href="http://www.cryptopp.com/w/index.php?title=Raw_RSA&amp;action=edit">View 
  source</A> 
  <LI id=ca-history><A title="Past revisions of this page [h]" accessKey=h 
  href="http://www.cryptopp.com/w/index.php?title=Raw_RSA&amp;action=history">History</A> 
  </LI></UL></DIV></DIV>
<DIV class=portlet id=p-personal>
<H5>Personal tools</H5>
<DIV class=pBody>
<UL>
  <LI id=pt-login><A 
  title="You are encouraged to log in; however, it is not mandatory [o]" 
  accessKey=o 
  href="http://www.cryptopp.com/w/index.php?title=Special:UserLogin&amp;returnto=Raw_RSA">Log 
  in / create account</A> </LI></UL></DIV></DIV>
<DIV class=portlet id=p-logo><A title="Visit the main page" 
style="BACKGROUND-IMAGE: url(http://www.cryptopp.com/w/images/0/0b/Logo-Steel.png)" 
href="http://www.cryptopp.com/wiki/Main_Page"></A></DIV>
<SCRIPT type=text/javascript> if (window.isMSIE55) fixalpha(); </SCRIPT>

<DIV class="generated-sidebar portlet" id=p-navigation>
<H5>Navigation</H5>
<DIV class=pBody>
<UL>
  <LI id=n-mainpage-description><A title="Visit the main page [z]" accessKey=z 
  href="http://www.cryptopp.com/wiki/Main_Page">Main page</A> 
  <LI id=n-portal><A 
  title="About the project, what you can do, where to find things" 
  href="http://www.cryptopp.com/wiki/Crypto++_Wiki:Community_portal">Community 
  portal</A> 
  <LI id=n-currentevents><A 
  title="Find background information on current events" 
  href="http://www.cryptopp.com/wiki/Crypto++_Wiki:Current_events">Current 
  events</A> 
  <LI id=n-recentchanges><A title="The list of recent changes in the wiki [r]" 
  accessKey=r href="http://www.cryptopp.com/wiki/Special:RecentChanges">Recent 
  changes</A> 
  <LI id=n-randompage><A title="Load a random page [x]" accessKey=x 
  href="http://www.cryptopp.com/wiki/Special:Random">Random page</A> 
  <LI id=n-help><A title="The place to find out" 
  href="http://www.cryptopp.com/wiki/Help:Contents">Help</A> 
</LI></UL></DIV></DIV>
<DIV class=portlet id=p-search>
<H5><LABEL for=searchInput>Search</LABEL></H5>
<DIV class=pBody id=searchBody>
<FORM id=searchform action=/w/index.php><INPUT type=hidden value=Special:Search 
name=title> <INPUT id=searchInput title="Search Crypto++ Wiki" accessKey=f 
type=search name=search> <INPUT class=searchButton id=searchGoButton title="Go to a page with this exact name if exists" type=submit value=Go name=go>&nbsp; 
<INPUT class=searchButton id=mw-searchButton title="Search the pages for this text" type=submit value=Search name=fulltext> 
</FORM></DIV></DIV>
<DIV class=portlet id=p-tb>
<H5>Toolbox</H5>
<DIV class=pBody>
<UL>
  <LI id=t-whatlinkshere><A title="List of all wiki pages that link here [j]" 
  accessKey=j 
  href="http://www.cryptopp.com/wiki/Special:WhatLinksHere/Raw_RSA">What links 
  here</A> 
  <LI id=t-recentchangeslinked><A 
  title="Recent changes in pages linked from this page [k]" accessKey=k 
  href="http://www.cryptopp.com/wiki/Special:RecentChangesLinked/Raw_RSA">Related 
  changes</A> 
  <LI id=t-specialpages><A title="List of all special pages [q]" accessKey=q 
  href="http://www.cryptopp.com/wiki/Special:SpecialPages">Special pages</A> 
  <LI id=t-print><A title="Printable version of this page [p]" accessKey=p 
  href="http://www.cryptopp.com/w/index.php?title=Raw_RSA&amp;printable=yes" 
  rel=alternate>Printable version</A> 
  <LI id=t-permalink><A title="Permanent link to this revision of the page" 
  href="http://www.cryptopp.com/w/index.php?title=Raw_RSA&amp;oldid=7803">Permanent 
  link</A> </LI></UL></DIV></DIV></DIV><!-- end of the left (by default at least) column -->
<DIV class=visualClear></DIV>
<DIV id=footer>
<DIV id=f-poweredbyico><A href="http://www.mediawiki.org/"><IMG height=31 
alt="Powered by MediaWiki" 
src="Raw%20RSA%20-%20Crypto++%20Wiki_archivos/mhtF6(1).tmp" width=88></A></DIV>
<UL id=f-list>
  <LI id=lastmod>This page was last modified on 17 February 2011, at 17:45. 
  <LI id=viewcount>This page has been accessed 109 times. 
  <LI id=privacy><A title="Crypto++ Wiki:Privacy policy" 
  href="http://www.cryptopp.com/wiki/Crypto++_Wiki:Privacy_policy">Privacy 
  policy</A> 
  <LI id=about><A title="Crypto++ Wiki:About" 
  href="http://www.cryptopp.com/wiki/Crypto++_Wiki:About">About Crypto++ 
  Wiki</A> 
  <LI id=disclaimer><A title="Crypto++ Wiki:General disclaimer" 
  href="http://www.cryptopp.com/wiki/Crypto++_Wiki:General_disclaimer">Disclaimers</A> 
  </LI></UL></DIV></DIV>
<SCRIPT>if (window.runOnloadHook) runOnloadHook();</SCRIPT>
<!-- Served in 0.319 secs. --></BODY></HTML>
